package com.desay.pangoo.itmt.service;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.web.multipart.MultipartFile;

import com.desay.pangoo.itmt.controller.vo.TechProjectInfoChangeVo;
import com.desay.pangoo.itmt.controller.vo.TechProjectInfoVo;
import com.desay.pangoo.itmt.entity.TechProjectInfoChangeEntity;
import com.desay.pangoo.itmt.entity.TechProjectInfoEntity;
import com.desay.pangoo.itmt.entity.TechProjectInfoHistoryEntity;

/**
 * 
 * @author uidq1163
 *
 */
public interface TechProjectInfoService {
	/**
	 * 添加工作组
	 * 
	 * @param groupName
	 * @return
	 */
	Long create(TechProjectInfoVo vo);

	/**
	 * 添加变更内容申请
	 * 
	 * @param vo
	 * @return
	 */
	Long projectChange(TechProjectInfoChangeVo vo);

	/**
	 * 删除工作组
	 * 
	 * @param id
	 */
	void delete(Long id);

	/**
	 * 
	 * @param id
	 * @return
	 */
	TechProjectInfoEntity getById(Long id);

	/**
	 * 获取课题历史信息
	 * 
	 * @param id
	 * @return
	 */
	Page<TechProjectInfoHistoryEntity> getHistoryById(Integer pageSize, Integer pageNum, Long id);

	/**
	 * 更新工作组名称
	 * 
	 * @param id
	 *            需要更新的工作组ID
	 * @param groupName
	 *            新的工作组名称
	 */
	void update(Long id, TechProjectInfoVo vo);

	/**
	 * 
	 * @param pageSize
	 * @param pageNo
	 * @param techClassId
	 * @param workGroupId
	 * @param techPtn
	 * @param researchForms
	 * @param techName
	 * @param subsidiary
	 * @param description
	 * @param techLevel
	 * @param priority
	 * @param quantitativeIndicators
	 * @param tMTApproval
	 * @param maturity
	 * @param requirementSource
	 * @param developedBy
	 * @param dutyBuss
	 * @param toolsEquipment
	 * @param minResourceNeeded
	 * @param maxResourceNeeded
	 * @param isAll
	 * @return
	 */
	Page<TechProjectInfoEntity> getList(Integer pageSize, Integer pageNo, List<Long> techClassId,
			List<Long> workGroupId, String techPtn, List<String> researchForms, String techName, String subsidiary,
			String description, List<Integer> techLevel, List<String> priority, String quantitativeIndicators,
			List<String> tMTApproval, List<String> maturity, List<String> requirementSource, String developedBy,
			List<Long> relevanceBuss, List<Long> dutyBuss, String toolsEquipment, Float minResourceNeeded,
			Float maxResourceNeeded, Boolean isAll, List<Long> platforms, List<Long> year, List<String> deliveryReview,
			Integer status, Boolean isMajorProject);

	Object uploadExcelFile(MultipartFile file) throws IOException;

	/**
	 * 课题变更审核
	 * 
	 * @param vo
	 * @param id
	 */
	void auditProjectChange(TechProjectInfoChangeVo vo, Long id);

	/**
	 * 
	 * @param pageSize
	 * @param pageNo
	 * @param techClassId
	 * @param workGroupId
	 * @param techPtn
	 * @param techName
	 * @param creator
	 * @param auditor
	 * @param auditStatus
	 * @return
	 */
	Page<TechProjectInfoChangeEntity> getChangeList(Long applyId,Long techId, Integer pageSize, Integer pageNo, Long techClassId,
			Long workGroupId, String techPtn, String techName, String creator, String auditor, Integer auditStatus);

	/**
	 * 根据日期获取当天的全部提案信息
	 * 
	 * @param date
	 *            一个日期
	 * @return 当天新增的技术提案
	 */
	List<TechProjectInfoEntity> listTechProjectInfoInDate(Date date);

}
